home *** CD-ROM | disk | FTP | other *** search
- SVDED.x
-
- テキストエディタで記述される.SVLファイルにしたがって
- .SVD(.SVX)ファイルを生成します。
-
- .SVLファイルの書き方次第では.SVD(.SVX)ファイルに対して
- アフレコや切り出しや連結などを行なうこともできます。
-
- 作業中断は[ESC]です。
-
-
- ----------------------------------------------------------------
- ----------------------------------------------------------------
-
- ◎.SVLファイルの文法(?)
-
- 注釈および改行のみの行は無視されます。
-
- 最初の認識される行は"SVL"で始まる行です。
- (念のため後ろには何もつけないで下さい)
- 次に認識される行は.svdファイル指定かマクロファイル指定(後述)です。
-
- .svdファイル指定は".svd"の後に出力ファイル名を指定します。
- 既に存在するファイルを指定するとエラーです。
-
- 続いて、ヘッダを構成するパラメータを指定します。
-
- .id コメントを最大239文字加えます。
-
- .xsize X方向のサイズ指定です。
-
- (注) 16の倍数単位で切り捨てられます。
- 最大値は512
-
- .ysize Y方向のサイズ指定です。
-
- (注) 最大値は384
-
- .defaultsize デフォルトのサイズ指定です。(192x128)
-
- .quality 画質です。現在は0固定です。
-
- .type 圧縮形式です。現在は0(無圧縮)固定です。
-
- .fps 秒間フレーム数です。デフォルトは15です。
-
- .pcmrate PCMの周波数とデータ形式を指定します。
-
- 7.8 7.8kHz ADPCM
-
- (注) 7.8kHz ADPCMは
- サポート対象外となりましたので
- 作成する場合は注意して下さい。
-
- 15.6 15.6kHz ADPCM
-
- m32 32.0kHz 16bit monoral PCM
- m44 44.1kHz 16bit monoral PCM
- m48 48.0kHz 16bit monoral PCM
-
- m16 16.00kHz 16bit monoral PCM
- m22 22.05kHz 16bit monoral PCM
- m24 24.00kHz 16bit monoral PCM
-
- s32 32.0kHz 16bit stereo PCM
- s44 44.1kHz 16bit stereo PCM
- s48 48.0kHz 16bit stereo PCM
-
- s16 16.00kHz 16bit stereo PCM
- s22 22.05kHz 16bit stereo PCM
- s24 24.00kHz 16bit stereo PCM
-
- NULL 無音データ指定(ADPCM)
-
- .source .SVD(.SVX)ファイルの取り込み指定です。
- ID以外のヘッダパラメータは
- ここで指定されたファイルと同一のものが
- 使用されます。
-
- (注) ID以外のパラメータを変更しないで下さい。
- IDを変更する場合は".source"の前に
- ".id"行をおくこと。
-
- .framenum 総フレーム数を指定します。
- ".source"指定の後では".framenum -"で
- 元ファイルのフレーム数になります。
-
- ".framenum"以降の行では
- フレーム取り込み支援コマンドを指定します。
-
- .poster 引数で指定される座標からVRAM上の画像を
- ポスター画像として取り込みます。
-
- .(数値) 引数で指定される座標からVRAM上の画像を
- 数値で示されるフレームに取り込みます。
- 実行後はフレーム数が+1されます。
-
- .copy ".source"指定されたファイルから
- 引き数で示されるフレームまで取り込みます。
-
- 引き数に"+1"を指定した場合は1フレームづつ取り込みます。
-
- 引き数に"-"のみを指定した場合は最終フレームまで取り込みます。
-
- ".source"指定が必ず必要です。
-
- .seek ".source"指定されたファイルから
- 1フレーム分の画像データのみ捨てます。
- 音声データは取り込まれます。
- 画像データを1枚だけ差し替えるなどの用途に利用して下さい。
-
- ".source"指定が必ず必要です。
-
- .load 画像ローダーなどのコマンドを実行します。
- パスは必ず通しておいて下さい。
-
- .pcm 現時点のフレームから再生開始されるPCMを
- 指定されたファイルから取り込みます。
-
- ".pcm"とファイル名の間に
- 1byte単位のオフセット量を十進数で指定することができます。
-
- .pcm +16 foo.s44
-
- のように指定すると、foo.s44の先頭16bytesを捨ててから
- ファイルを読み込みます("+"は必ず必要)。
-
- .pcm -256 foo.pcm
-
- のように"-"を指定すると、先頭256bytes分の空白を入れてから
- foo.pcmを読み込みます。
-
-
- .repeat 引数で指定される開始フレームと終了フレームの間、
- ".next"行が現れるまでのコマンド列を繰り返し実行します。
-
- 引き数に"-"のみを指定した場合の繰り返しは
- 最終フレームまでです。
-
- ●.repeat~.next間の専用コマンドの説明
-
- ":"が行頭にある場合以外は".load"呼出です。
- 行頭の".load"はあってもなくても構いません。
-
- コマンドライン中の"%"は、例えば以下のように変換されます。
- %d 任意の桁の10進数
- %x 任意の桁の16進数
- %02d 最小2桁の10進数、1ケタの場合は頭に'0'を付加
- %変数の値はデフォルトでは次回の先頭取り込みフレームになっています。
-
- "+数値"または"-数値"が行頭にある場合は
- %変数にリピート毎に初期化されるオフセット値が加えられます。
-
- "*+数値"または"*-数値"が行頭にある場合は
- %変数にリピート毎に積算されるオフセット値が加えられます。
-
- ":"が行頭にある場合は取り込み指定です。
- 1行指定する度にフレーム数が+1されます。
-
- :0 ( 0, 0)-(191,127)を取り込みます。
- :
- :
- :4 (256, 0)-(447,127)を取り込みます。
- :
- :
- :7 (256,384)-(447,511)を取り込みます。
-
- :8 (192, 0)-(383,127)を取り込みます。
- :9 (192,128)-(383,255)を取り込みます。
-
- :A ( 64, 0)-(255,127)を取り込みます。
- :
- :
- :E (320, 0)-(511,127)を取り込みます。
- :
- :
- :H (320,384)-(511,511)を取り込みます。
-
- :I (192,256)-(383,383)を取り込みます。
- :J (192,384)-(383,511)を取り込みます。
-
- :: (160,192)-(351,319)を取り込みます。
-
- :@ 引き数で指定された座標から取り込みます。
-
- (注) 可変サイズの場合は:@を使用して下さい。
-
- :@ 10 20
-
- と指定した場合は(10,20)-(XSIZE+10-1,YSIZE+20-1)
- を取り込みます。
- (XSIZEとYSIZEはそれぞれ.xsizeと.ysizeで指定した値)
-
-
- :! ".copy +1"を実行します。
- :> ".seek"を実行します。
-
- 注意としては
- "%"をファイル名に含む画像ファイルを指定するなど
- コマンドライン中に"%"を使用できません。
-
- .next ".repeat"コマンドの終端です。
-
- .end .SVLを終了します。
-
- ----------------------------------------------------------------
- ----------------------------------------------------------------
-
-
- ◎ver 0.01 変更点
-
- ・マクロファイル(.SVM)に対応
-
- マクロ内で文字列変数を定義可能です。変数は.SVL内部で置換されます。
-
- .SVLに.SVMをインクルードするには、".svd"の代わりに
- ".svdmacro"を記述して下さい。
- 例えば
-
- .svdmacro foo.svm
-
- でfoo.svm中の変数定義が使用されます。
-
- .SVMの書式ですが、先頭2行は基本的に.SVLと似通っていて
-
- SVM
- .svd foo.svx
-
- の様に識別子"SVM"と.SVD(.SVX)ファイル指定が必須です。
- 以降は
-
- (変数名)=(置換される文字列)
-
- の繰り返しです。
-
- 例えば、foo.svlからfoo.svmをインクルードして
- foo.svm中に
-
- ICEFILE=ice foo%02d.ice
-
- の記述がある場合、foo.svl中の
-
- .load ICEFILE
-
- は
-
- .load ice foo%02d.ice
-
- に置換されます。
-
- また、.SVMファイルは終端に".endmacro"が必要です。
-
-
- ・追加の内部コマンド(.framenum以降に指定可能)
-
- .get メインメモリ上にワーク(512KB)を確保して
- GRAMの内容を取り込みます。
- 本命令以降のアクセス対象は原則としてワークが選択されます。
- GRAMアクセスが遅い機種では多少有り難いかもしれません。
-
- .look ワークの内容をGRAMに復帰させます。
- ワーク上がどうなっているか確認したい場合にどうぞ。
- (512x512全て復帰するのでかなり無駄という話も)
-
- .free ワークを解放します。
-
- .put 内容をGRAMに復帰してからワークを解放します。
-
- .even 偶数フィールド512x256->512x512へ補間します。
- .getで確保したワークが有効な場合には
- ワーク上で動作します。
-
- .odd 奇数フィールド512x256->512x512へ補間します。
- .getで確保したワークが有効な場合には
- ワーク上で動作します。
-
- .to384 512x512->384x256に縮小します。
- .getで確保したワークが有効な場合には
- ワーク上で動作します。
-
- .to256 512x512->256x256に縮小します。
- コーディングを最適化してないので遅いと思います。
- .getで確保したワークが有効な場合には
- ワーク上で動作します。
-
- .f480 512x480->512x384に縮小します。
- .getで確保したワークが有効な場合には
- ワーク上で動作します。
-
- .f512 512x512->512x384に縮小します。
- .getで確保したワークが有効な場合には
- ワーク上で動作します。
-
- .initRGB RGB成分分解用のバッファ(1MB!)を確保します。
- .zoom使用時には内部的に使用されます。
-
- .deRGB バッファ上にRGB成分を分解します。
- 512x512全て分解するので多少時間がかかります。
- .getで確保したワークが有効な場合には
- ワーク上で動作します。
-
- .g_deRGB .getでワークを確保している場合でも
- GRAMから直接バッファ上にRGB成分を分解します。
-
- .mixRGB RGB成分を分解して
- バッファ上に存在する成分と平均化します。
- .getで確保したワークが有効な場合には
- ワーク上で動作します。
-
- .g_mixRGB GRAMから直接バッファ上にRGB成分を平均化します。
-
- .addRGB RGB成分を分解してバッファ上に存在する成分に加算します。
- 最大4回までの加算が可能です。
- .getで確保したワークが有効な場合には
- ワーク上で動作します。
-
- .g_addRGB GRAMから直接バッファ上にRGB成分を加算します。
-
- .divRGB バッファ上のRGB成分に除算を行ないます。
-
- .enRGB バッファ上のRGB成分を再構成します。
- .getで確保したワークが有効な場合には
- ワーク上で動作します。
-
- .g_enRGB バッファ上のRGB成分をGRAM上に再構成します。
-
- .monotone 64階調の白黒画像を作成します。
- .getで確保したワークが有効な場合には
- ワーク上で動作します。
-
- .freeRGB RGB成分分解用のバッファを解放します。
-
- .zoom 任意の倍率で拡大・縮小を行ないます。
- パラメータは X0 Y0 W0 H0 X1 Y1 W1 H1
- (X0,Y0)元画像始点
- (W0,H0)元画像の幅・高さ
- (X0,Y0)変換先画像始点
- (W0,H0)変換先画の像幅・高さ
- で与えます。
-
- 拡大縮小処理のループ回数は
-
- W1×H1×(W0÷GCM(W0,W1))×(H0÷GCM(H0,H1))
-
- で表されます。(後半の2項は1ドットあたりの処理数)
- ループ回数が極端に多くなるような場合には
- それなりの時間を必要とします。
- .getで確保したワークが有効な場合には
- ワーク上で動作します。
-
- .aZOOM .zoomがあまりにも遅いので用意しました。
- RGBバッファを確保せずに拡大縮小を行ないます。
- 引き数の指定は.zoomと同じです。
- 拡大で領域が重なる場合の動作は保証されません。
- .getで確保したワークが有効な場合には
- ワーク上で動作します。
-
- .g_aZOOM .aZOOMと同じですが結果は常にGRAM上に書き出されます。
- 拡大で領域が重なる場合こちらを用いた方が
- 良いかもしれません。
-
- .vsync パラメータで与えられた回数分の
- 垂直同期期間だけ待ちます。
-
- .vsync 60
-
- で約1秒のウェイトになります。
-
- .kbhit キー入力を待ちます。
-
- .crtmod パラメータで与えられた画面モードに切り替えます。
- IOCSの_CRTMODを呼び出しています。
- 例えば15kHz 256x256(64k色)モードは
-
- .crtmod 15
-
- になります。
-
- (注)パラメータは内部的に+256されます。
-
- .tvctrl パラメータで与えられた値のテレビコントロールを発行します。
-
- .image512 イメージユニットから512x512モードで取り込みます。
- 必ずGRAMが更新されます。
-
- .image256 イメージユニットから256x256モードで取り込みます。
- 必ずGRAMが更新されます。
-
- .imageMUL イメージユニットから512x512モードで5回取り込んで
- 各RGB成分の5個の中央値で512x512画像を再構成します。
- バッファが2MB(!!)必要です。
- 必ずGRAMが更新されます。
-
- .imagePOS 画像取り込み時の水平位置の微調整用です。
- パラメータはX-BASICのimg_pos()関数と同じです。
-
- .logfile ログファイルをオープンします。
-
- .logprint ログファイルに文字列を書き込みます。
-
- .logend ログファイルをクローズします。
-
- .rmc .rmcファイルを送信します。
- RMCDRV.SYSが組み込まれていない場合は無視されます。
-
- .rmp .rmpファイルを送信します。
-
-
- ----------------------------------------------------------------
- ----------------------------------------------------------------
-
-
- ◎ver 0.02 変更点
-
- ・マクロファイル(.SVM)中で環境変数の取り込みに対応
-
- "(変数名)=(置換される文字列)"ではなく"(変数名)"のみの行が
- ある場合は環境変数取り込みになります。
-
- .SVL中では"$(変数名)"と記述します。
-
-
- ・追加の内部コマンド(.framenum以降に指定可能)
-
- .if?? 条件分岐を行ないます。
-
- .ifEQ 内部ステータスと引数が等しい場合に真
- .ifNE 内部ステータスと引数が異なる場合に真
- .ifLT 内部ステータスが引数より小の場合に真
- .ifGT 内部ステータスと引数より大の場合に真
-
- .fi 対応する.if??文が真の場合
- .if??~.fiが実行されます。
-
- .else 対応する.if??文が真の場合.fiまで分岐、
- 偽の場合に.else~.fiが実行されます。
-
- .setNUM 整数型変数に引数の値を代入します。
- .addNUM 整数型変数に引数の値を加算します。
- .subNUM 整数型変数に引数の値を減算します。
- .mulNUM 整数型変数に引数の値を乗算します。
- .divNUM 整数型変数を引数の値で除算します。
- .modNUM 整数型変数を引数の値で割った余りを代入します。
-
- .setSTR 引数を文字列として文字列変数に代入します。
-
- .setVAR 整数型変数の値を内部ステータスに代入します。
-
- .cmpSTR 引数の文字列と文字列変数を比較します。
- 結果は内部ステータスに反映されます。
-
- ・XVD作成用.XVLファイルに対応(XVDED機能搭載)
-
- ●.XVLファイル専用ヘッダ作成コマンド
-
- .XVDauthor Data Author 指定
- .XVDsubtitle Sub Title 指定
- .XVDtitle Title 指定
- .XVDxlength X Length 指定
- .XVDylength Y Length 指定
- .XVDaspect Aspect Ratio 指定
- .XVDtimebase Base Time Unit 指定
- .XVDframerate Frame Rate 指定
- .XVDpcmtype Pcm Type 指定
- .XVDpcmchannel Pcm Channel 指定
- .XVDpcmcfrequency Pcm Frequency 指定
- .XVDreadcomment CommerntBlockに指定ファイル読み込み
- .XVDcomment CommerntBlock 指定
- .XVDheaderclose ヘッダ作成終了
-
- (注)詳しくはXVDフォーマット規格書を参照して下さい。
-
- ●.XVLファイルで使用禁止のコマンド
-
- .source
- .copy
- .seek
- (.repeat~.next中の該当するコマンドも含む)
-
- ----------------------------------------------------------------
- ----------------------------------------------------------------
-
- ◎.XVLファイルの文法
-
- "/"が行頭にある場合は注釈です。
- 注釈および改行のみの行は無視されます。
-
- 最初の認識される行は"XVL"で始まる行です。
- (念のため後ろには何もつけないで下さい)
- 次に認識される行は.xvdファイル指定かマクロファイル指定です。
-
- .xvdファイル指定は".xvd"の後に出力ファイル名を指定します。
- 既に存在するファイルを指定するとエラーです。
-
- マクロファイル指定の場合は.SVLの場合と同じで
- ".svdmacro"行に.SVMファイルを指定します。
- .SVMファイル中には".xvd"行が必要です。
-
- 続いて、ヘッダを構成するパラメータを指定します。
- ヘッダ作成部では
- 「.XVDreadcommentと.XVDcommnetを除く.XVLファイル専用ヘッダ作成コマンド」
- 及び
- ".framenum"
- を必ず1度は記述しなければなりません。
- また、ヘッダ作成部の最後は".XVDheaderclose"でなければなりません。
-
- 以降はフレーム取り込み支援コマンドを指定します。
-
- .XVLファイルで使用禁止のコマンド以外は
- 全て.SVLの場合と同様に記述可能です。
-
- ----------------------------------------------------------------
- ----------------------------------------------------------------
-
- ◎各種ワークバッファに関して
-
- まず、特殊命令系はデフォルトで$00C00000~$00C7FFFFの
- 512KBの領域に対して作用することになっています。
-
- .getを宣言することによってメインメモリ上に512KBの領域を確保し
- 特殊命令系が参照するアドレスがこの領域の先頭に更新されます
- この状態は.freeか.putで領域を解放するまで保持されます。
- また、.getは領域が予め確保されている・いないにかかわらず
- その時点での$00C00000~$00C7FFFFの内容を領域に転送します。
- (既に確保されていた場合は同じ領域上に上書きされます。)
-
- このままでは$00C00000~$00C7FFFFを個別に参照することができないので
- .g_系の専用命令によってこれを解消しています。
- .g_系の専用命令は必ず通常の命令に対応していて
- .getでワークが確保されていない場合には
- .g_系の専用命令も通常の命令も全く動作は同じです。
-
- これとは更に別にRGB作業領域を.initRGBによって確保することができます。
- この領域は各最大8bitのR,G,B及び(R*3+G*6+B)/10で得られる値の
- 4つの要素からなる512x512個分の計1MBの大きさになります。
-
- RGB領域は、当初は.zoomでの使用しか考えていなかったのですが
- .aZOOMの方が動作が速いため.zoomは幽霊的な機能になっています。
- 現在RGB領域は2つ以上の画像を合成するために用いられています。
-
- RGBの分解・合成は必ず5bit+輝度1bitで扱われます。
- RGB領域内部では6bit単位で演算が行なわれます。
- このため、例えば加算に関しては4回までしか保証されません。
-
- ----------------------------------------------------------------
- ----------------------------------------------------------------
-
- ◎.repeat~.next間の.load行内部の%d系整数変数に関して
-
- この変数は挙動を把握するのに試行錯誤を要するかもしれません。
-
- %d系整数変数の値はは以下の3つの変数値の合計になります。
-
- ・フレーム変数
-
- 基本的には.repeat~.next内部での現在の処理フレーム番号です。
- .repeat直後は現在の処理フレーム番号が代入されます。
- .load行で%d系変数が使用された直後に+1されます。
- :@などのフレーム画像書き込み実行後には
- 次回の処理フレーム番号が代入されます。
-
- ・相対変数
-
- 初期値は0です。
- +(数値)や-(数値)で指定された値が代入されます。
- .repeat毎に0が代入されます(ver0.02以降でBUG FIX)。
-
- ・絶対変数
-
- 初期値は0です。
- *+(数値)や*-(数値)で指定された値が積算されます。
- .repeat毎に初期化されません。
-
- ----------------------------------------------------------------
- ----------------------------------------------------------------
-
- ◎戯れ言
-
- 多分、非公開コマンドも存在するかもしれませんが
- デバッグ中につき使用禁止です。
-
- ----------------------------------------------------------------
- ----------------------------------------------------------------
-
- ◎謝辞
-
- XVDED部分に関してはRev2.00準拠となっています。
-
- 拡大縮小のアルゴリズムは
- X68000マシン語プログラミングのグラフィックス編に掲載の
- GSHRINK.Sを参考&一部利用しています。
-
- .rmcファイル送信はデバイス"RMC"にファイルを書き込んでいます。
-
- .rmpファイル送信にはREMOP_FNC.HASを改造して作成された
- ライブラリを使用しています。
-
- GCC一式、HAS.x、HLK.xなどは水や空気のような存在です。
- (使って当たり前だけど存在しないと考えただけで・・・・・・)
-
- これらのアルゴリズム・関係ツールの作者様に感謝致します。
-
-
- ----------------------------------------------------------------
- ----------------------------------------------------------------
-
- ◎履歴
-
- ver 0.00 beta Rel.0 ~ 非公開
- ver 0.01 Rel.5 正式公開
-
- ver 0.01 Rel.6 内部変数をmallocで確保していたのが
- heapが足りなくなる様なので
- DOSCALLで確保するように変更。
-
- ver 0.01 Rel.7 ~ 非公開
-
- ----------------------------------------------------------------
- ----------------------------------------------------------------
-
- 結構内部的に変更されたのでかなりヤバいかも。
-
- みんなどんどん使ってバグ出し&要望などたのんます。
-
-
-
-
-
- [MZL]
-